פתרון מוצע לבחינת מה"ט ב_שפת c מועד אביב תשע"ח, פברואר 8102 מחבר: מר שייקה בילו, מכללת אורט רחובות

Similar documents
Engineering Programming A

Algorithms. Intro2CS week 5

פתרון מוצע לבחינה בשפת C של מה"ט מועד אביב תשע"ז, פברואר 2017 מחבר: מר עסאקלה שאדי, מכללת אורט בראודה

קורס תכנות שיעור שישי: מחרוזות, מצביעים

משתנים שעור מס. 2 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

תרגול 4 פונקציות. מבנה של פונקציה: public static <return value type> <function name> (<arg1 type> <arg1>, <arg2 type> <arg2>, ) { <function body> }

מבוא לתכנות בשפת C. Tzachi (Isaac) Rosen

תרגילים ופתרונות בשפת - C הסתעפויות

סכום (סדרת ערכים) אחרת - דוגמא: סכום-ספרות (num) אם < 10 num החזר 1 או אם = 0 = num החזר 0 public static int numofdigits (int num)

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

Practical Session - Heap

מבוא לתכנות ב- JAVA מעבדה 2

Amortized Analysis, Union-Find,

שאלה 1 מהו הפלט של התוכנית הבאה:

מבוא לתכנות ב- JAVA תרגול 7

קורס תכנות שיעור שני: שימוש במשתנים,

מדעי המחשב 2 יחידות לימוד פתרון בחינת הבגרות פרק א. I x > a. פתרון 2: משפט switch

מבוא לתכנות תוכנית שעור מס. 1 1 דר' דרור טובי, המרכז האוניברסיטאי אריאל בשומרון.

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

Programming in C תרגול 8

חוברת תרגילים לתרגול יסודות התכנות

גירסה

מבוא למדעי המחשב תרגול 13: עצים בינאריים

מבוא למדעי המחשב תירגול 2: מבוא למדעי המחשב מ' - תירגול 2

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

מבוא למדעי המחשב תירגול 3:

Communication Networks ( ) / Spring 2011 The Blavatnik School of Computer Science, Tel-Aviv University. Allon Wagner

מצליחה. 1. int fork-bomb() 2. { 3. fork(); 4. fork() && fork() fork(); 5. fork(); printf("bla\n"); 8. return 0; 9. }

Introduction to Programming in C תרגול 8

רזח יליגרתו םי יראני ב ם

הפלט אחרי הביצוע של ההוראה :what3(root)

מבוא לתכנות ב- JAVA מעבדה 4

Computer Programming A תרגול 9


$ gcc check.c. $ a.out. $ gcc check.c -o check. $ check. $ gcc -Wall check.c -o check. #include <stdio.h>

מבוא לתכנות ב- JAVA תרגול 6

עמוד 1 (תאריך ( âùéä ער äìàù בכל השאלות ניתן להניח שהקלט תקין. 100 íåëñ חורף :

Exams questions examples

תכנות מתקדם בשפת C משתנים

ת ונכת סרוק תורשוקמ תומישר :יעישת רועיש 1

לאחר הרצת התכנית יופיע בחלון הoutput הפלט הבא: run: ******************************* *****Welcome to Java!***** *******************************

מערכים שעור מס. 4 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

קורס תכנות כתובות בזיכרון כתובות בזכרון מצביעים וכתובות מצביעים וכתובות שיעור שביעי: מבנים, הקצאת זיכרון דינאמית האופרטור &

מבוא לתכנות ב- JAVA תרגול 5. Ipc161- practical session 5

קורס תכנות בשיעור הקודם למדנו על רקורסיה שיעור שישי: מערכים פונקציה רקורסיבית שאלה חישוב נוסחאות רקורסיביות בשפת C

Graph Database, think different!

מבוא למדעי המחשב תרגול 5: לולאות ומערכים

Operating Systems. Practical Session 4 Threads

ב ה צ ל ח ה! אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ה תשרי תשע"ח 15/10/17 שמות המורים: ציון סיקסיק מיועד לתלמידי : א'

תרגול מספר 3: מערכים

תרגילים ופתרונות בשפת C

במידה ולסעיף ניתנה תשובה ובנוסף נרשם לגבי הסעיף לא יודע/ת אזי הניקוד שיינתן

else if (p.getinfo().getvotes() < c1.getvotes()) { c1 = p.getinfo()

תוכנה 1 טיפוסי השפה טיפוסים לא פרימיטיביים הטיפוסים הפרימיטיביים מחרוזות המרה למספרים תרגול 2: טיפוסי שפה, מחרוזות, מערכים ושגיאות

מבוא לשפת סי סוגי לולאות שבוע שעבר... תוכנייה. לולאת while דוגמא: קליטת מספר חיובי ד'/כסלו/תשע "ב. משפטי if משפטי switch סוגי לולאות בשפת C דוגמאות

Smart Pointers Nir Adar

תוכנה 1. תרגול מס' 3 עבודה עם מחרוזות )Strings( מתודות )Methods( העברת פרמטרים

Practical Session No. 14 Topological sort,amortized Analysis

Programming for Engineers in Python

Programming for Engineers in Python

תרגול 6 רקורסיה ותכנות מונחה עצמים

Computer Programming Summer 2017

שאלות חזרה 2 האוניברסיטה החליטה לפרסם שמות הסטודנטים המצטיינים בקורס שלנו. סטודנט מצטיין הוא סטודנט שקיבל

הנכות 1 םוכיס לוגרת 13 1

הוראות לנבחן גמר לבתי ספר לטכנאים ולהנדסאים סמל השאלון: תכנות מערכות ושפת סף ההנחיות בשאלון זה מנוסחות בלשון זכר, אך מכוונות לנבחנות ולנבחנים כאחד.

הנכות 1 םוכיס לוגרת 13 1

הנכות 1 םוכיס לוגרת 14 1

סעיף ב )11 נקודות( public synchronized void advance(staircase staircase) throws InterruptedException staircase!

גיליון תשובות מספר נבחן:

כתבו קוד ב- 3 קבצי ה hpp (כתבו כהערה את שם הקובץ מעל) כך שהקוד יהיה תקין ובסגנון טוב. אין חובה

<exp> ::= <define> <cexp> <define> ::= ( define <var-decl> <cexp> ) / DefExp(var:VarDecl, val:cexp)

נוסחאון מיקרובקר 8051 גרסה: 0.1

תרגול 3 מערכים ופונקציות

סטודנטים יקרים הפתרונות מוגשים בסרטוני וידאו המלווים בהסבר קולי, כך שאתם רואים את התהליכים בצורה מובנית, שיטתית ופשוטה, ממש כפי שנעשה בשיעור פרטי.

תוכנה 1 סמסטר א' תשע"א

תרגול 7 רשימות משורשרות, רקורסיית

הוראות לנבחן סף ובהם שמונה שאלות. עליך לענות על שש שאלות, על פי ההנחיות בכל פרק. גמר לבתי ספר לטכנאים ולהנדסאים

תוכנה 1 בשפת Java נושאים שונים בהורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב

תוכנה 1 תרגול מספר 13

תוכנה 1 תרגול מספר 13

פרק 15 טיפוס חדש: מבנים שימוש במבנים שימוש במבנים שימוש במבנים

מבוא למדעי המחשב תרגול 8 רשימה משורשרת כללית, Comparator

עקרונות שפות תכנות 2016 תרגול 8 Type Inference System. Substitution Interpreter.

הקלחמ ה תמרב ת ונ וכ ת (static members ) יליזרב דהוא Java תפשב ם דקת מ תונכת ביבא ל ת תטיסרבינוא

3 Dynamic Routing A (RIP and OSPF)

Tutorial 10. Introduction to C++ שימו

Solution for Data Structure

הנכות 1 םוכיס לוגרת 13 1

תרגול 3 מערכים ופונקציות

מבוא למדעי המחשב הרצאה 2: ראשונים בשפת C

מבוא לתכנות ב- JAVA מעבדה 3. Ipc161-lab3

דף הדרכה ליצירת שרת/ לקוח עם GUI

מבוא לתכנות מערכות מבחן מועד א' סמסטר חורף

Chapter 11.2 Linked lists ( )

Tirgul 4 Scheduling:

קורס תכנות רשימה מקושרת דוגמה: חיפוש מעבר על רשימה דוגמא: שחרור רשימה מקושרת דוגמא: הוספת אברים שלא בהתחלה

Simple Web Service. namespace MyService { public class Service1 : System.Web.Services.WebService {

מבוא למדעי המחשב 2018 תרגול 7

הנכות 1 תואיגש םע תודדומתהו תואלול,םי : כרעמ 2 לוגרת

more...3 less...3 prompt...3

Transcription:

פתרון מוצע לבחינת מה"ט ב_שפת c מועד אביב תשע"ח, פברואר 8102 מחבר: מר שייקה בילו, מכללת אורט רחובות שאלה מספר 1 התוכנית מגדירה חמישה משתנים שלמים: השלושה הראשונים הם שלושה מצביעים - *s *t,i. j ושלושה נוספים הם שני זקיפים r* מבצעים השמה של כתובת המשתנה מקושרים. מבצעים השמה של כתובת המשתנה מקושרים. i לתוך שדה הכתובת של המשתנה s j חתוך שדה הכתובת של המשתנה מבצעים השמה של שדה הכתובת הנמצא בתוך המשתנה המשתנה r כך שהם כעת מקושרים. מבצעים השמה של שדה הכתובת הנמצא בתוך המשתנה המשתנה s כך שהם כעת מקושרים. מבצעים השמה של שדה הכתובת הנמצא בתוך המשתנה המשתנה t כך שהם כעת מקושרים. הדפסה ראשונה: כעת מדפיסים את שני הזקיפים שהוכנסו לאחר האתחול: הדפסה שנייה: t s t r i ו- j 5 7 כך שהם כעת כך שהם כעת לתוך שדה הכתובת של חתוך שדה הכתובת של לתוך שדה הכתובת של ומקבלים על המסך את שני הערכים שלהם כפי במקטע זה התוכנית מבצעת החלפה בין שני המשתנים המקוריים מתמטית בין המצביעים אשר מקושרים לשני המשתנים ערכם של i ו- j התחלפו וב- i יש כעת 7 וב- j יש כעת 5. כעת מדפיסים את שני הזקיפים ההחלפה: הדפסה שלישית: i. ו- j i i ו- j 7 5 במקטע זה התוכנית מבצעת לולאה המתחילה מ- ערכו ע"י ביצוע החלפה ו- j לאחר החלפה המתמטית ומקבלים על המסך את שני הערכים שלהם לאחר i=9 ומתקדמת עד ש- i קטן שווה,01 כלומר מבצעת שני סיבובים. בכל סיבוב נבדק האם המשתנה זקיף i גדול מ- 9 או לחילופין הוא בהפחתה עצמית של 0 קטן מ- 9, כל זמן שהתנאי הזה נכון המשתנה זקיף i עולה ב- 0. בסיבוב הראשוןשל הלולאה יודפס 9 כי הזקיף עומד בתנאי של בהיותו 2 הוא קטן מ- 9 ואז עולה ב- 0 ומודפס הערך.9 בסיבוב השני המשתנה עולה ל- 01 i ונכנס ללולאה ואז נבדק האם הוא גדול מ- 9, כיוון שהתשובה אמת ערכו עולה ב- 0 והוא הזקיף i הופך ל- 00 ואז עמוד 0

מודפס. כיוון שכעת הוא 00 הוא גדול מ- 01 כך שתנאי הקיום של הלולאה מסתיים והתוכנית מבצעת ירידת שורה ומסתיימת. #include<stdio.h> שאלה מספר 2 int func(int data[5][5]) int sumcol = 0, maxcolsum = 0, indexmaxcol, times; int i, j, limit=4, rounds, mod; for (i = 0; i < 5; i++) if (data[0][i] <= limit) for (j = 1; j <= data[0][i]; j++) printf("+%d", data[j][i]); sumcol += data[j][i]; else rounds = data[0][i] / 4; mod = data[0][i] % 4; while (rounds--) for (j = 1; j <= limit; j++) printf("+%d", data[j][i]); sumcol += data[j][i]; for (j = 1; j <= mod; j++) printf("+%d", data[j][i]); sumcol += data[j][i]; printf("=%d", sumcol); if (sumcol > maxcolsum) maxcolsum = sumcol; indexmaxcol = j; printf("\nmatrix Sum Col %d is %d\n\n", i+1, sumcol); sumcol = 0; עמוד 8

return maxcolsum; int main() int data[5][5] = 6,7,4,3,8,1,1,2,1,1,2,1,2,1,2, 3,1,1,2,1,2,1,1,8,2 ; int i, j,maxcolsum; printf("matrix[%d][%d]:\n",5,5); for (i = 0; i < 5; i++) for (j = 0; j < 5; j++) printf("%3d", data[i][j]); printf("\n"); printf("\n"); maxcolsum=func(data); printf("max Col Sum is %d\n", maxcolsum); return 0; Output: Matrix[5][5]: 6 7 4 3 8 1 1 2 1 1 2 1 2 1 2 3 1 1 2 1 2 1 1 8 2 + 1 + 2 + 3 + 2 + 1 + 2 = 11 Matrix Sum Col 1 is 11 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = 7 Matrix Sum Col 2 is 7 + 2 + 2 + 1 + 1 = 6 Matrix Sum Col 3 is 6 + 1 + 1 + 2 = 4 Matrix Sum Col 4 is 4 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 2 = 12 Matrix Sum Col 5 is 12 Max Col Sum is 12 עמוד 3

#include <stdio.h> #include <stdlib.h> #include <conio.h> שאלה מספר 3 /* Typedef struct name Node */ typedef struct Node int num; struct Node *next; Node; /* Menu selection */ int menu_select() int c; printf("============ L I S T - 1 =========\n"); printf(" 1. Add New Node to List 1 \n"); printf(" 2. Print List 1 + Count Nodes \n"); printf(" 3. Free List 1 \n"); printf("============ L I S T - 2 =========\n"); printf(" 4. Add New Node to List 2 \n"); printf(" 5. Print List 2 + Count Nodes \n"); printf(" 6. Free List 2 \n"); printf("======== Check Lists Sum =========\n"); printf(" 7. Compere List Nodes Sum \n"); printf("============ Concatenating =======\n"); printf(" 8. Combine List 1 & List 2 \n"); printf(" 9. Print new combined list \n"); printf("10. Free new combined List \n"); printf("11. Exit from program \n"); printf("==================================\n"); do printf("\nenter your choice:"); scanf("%d", &c); while (c<0 c>11); return c; /* Initialize the List with input number.*/ Node *Add(Node *head, int number) Node *tail = head; Node *new_item = (Node*)malloc(sizeof(Node)); new_item->num = number; new_item->next = NULL; if (tail == NULL) return new_item; עמוד 4

while (tail->next!= NULL) tail = tail->next; tail->next = new_item; return head; /* Count Nodes in List */ int Count_List(Node *head) int counter = 0; while (head!= NULL) counter++; head = head->next; return counter; /* Sum Nodes in List */ int Sum_List_Nodes(Node *head) int sum = 0; while (head!= NULL) sum += head->num; head = head->next; return sum; /* Free List */ void Free_List(Node *head) Node *to_free = head; while (to_free!= NULL) head = head->next; free(to_free); to_free = head; printf("the list is free and deleted!!!\n"); /* Display List on screen */ void Print_List(Node *head) Node *p; for (p = head; p!= NULL; p = p->next) עמוד 5

printf("node number is %d next place is %p\n", p- >num, p->next); if (p == NULL) printf("end Of list!!!\n"); return; /* Combine List1 with List2 */ Node *combine_lists(node *List1, Node *List2) Node *List1_head = List1; Node *List2_head = List2; int sumlist1 = 0, sumlist2 = 0; Summing List2 while (List1_head!= NULL) sumlist1 += List1_head->num; List1_head = List1_head->next; Summing List2 while (List2_head!= NULL) sumlist2 += List2_head->num; List2_head = List2_head->next; Chacking Lists sum for concatenating if (sumlist1 > sumlist2) while (List1->next!= NULL) List1 = List1->next; List1->next = List2; Moving on List2 to the end while (List2->next!= NULL) List2 = List2->next; Putting in the last node of List2 the head of List1 List2->next = List1_head; return List1_head; else while (List2->next!= NULL) List2 = List2->next; List2->next = List1; Moving on List1 to the end while (List1->next!= NULL) List1 = List1->next; עמוד 6

List2 Putting in the last node of List1 the head of List1->next = List2_head; return List2_head; /* Main program */ int main() int num = 0; int count; int SumList1 = 0, SumList2 = 0; int choice; int input = 0; Node *head1 = NULL; Node *head2 = NULL; for (;;) choice = menu_select(); switch (choice) case 1: printf("enter number to create new node(-1 to exit):\n"); scanf("%d", &input); while (input!= -1) head1 = Add(head1, input); printf("enter number to create new node(- 1 to exit):\n"); scanf("%d", &input); case 2: printf("list 1:\n"); Print_List(head1); count = Count_List(head1); printf("list 1 as %d Nodes\n", count); case 3: Free_List(head1); case 4: printf("enter number to create new node(-1 to exit):\n"); scanf("%d", &input); while (input!= -1) head2 = Add(head2, input); עמוד 7

printf("enter number to create new node(- 1 to exit):\n"); scanf("%d", &input); case 5: printf("list2:\n"); Print_List(head2); count = Count_List(head2); printf("list2 as %d Nodes\n", count); case 6: Free_List(head2); case 7: SumList1 = Sum_List_Nodes(head1); printf("list1 Sum Nodes: %d\n", SumList1); SumList2 = Sum_List_Nodes(head2); printf("list2 Sum Nodes: %d\n", SumList2); if (SumList1 > SumList2) printf("list1 Nodes sum is Bigger %d\n", SumList1); else printf("list2 Nodes sum is Bigger %d\n", SumList2); case 8: combine_lists(head1, head2); printf("list1 and List2 Combined!!!\n"); case 9: printf("new Combined List:\n"); if (SumList1 > SumList2) Print_List(head1); else Print_List(head2); case 10: Free_List(head1); case 11: exit(0); getch(); system("cls"); return 0; Output: == == == == == == L I S T - 1 == == == == = 1. Add New Node to List 1 2. Print List 1 + Count Nodes 3. Free List 1 עמוד 2

== == == == == == L I S T - 2 == == == == = 4. Add New Node to List 2 5. Print List 2 + Count Nodes 6. Free List 2 == == == == Check Lists Sum == == == == = 7. Compere List Nodes Sum == == == == == == Concatenating == == == = 8. Combine List 1 & List 2 9. Print new combined list 10. Free new combined List 11. Exit from program == == == == == == == == == == == == == == == == == Enter your choice: 9 New Combined List: Node number is 7 next place is 004EF478 Node number is 8 next place is 004EF4D0 Node number is 9 next place is 004EF528 Node number is 6 next place is 0049AAB0 Node number is 2 next place is 004D4A70 Node number is 4 next place is 004D4AC8 Node number is 3 next place is 004D4B20 Node number is 5 next place is 004D4B78 Node number is 6 next place is 004D4BD0 Node number is 7 next place is 00000000 End Of list!!! #include<stdio.h> #include<string.h> #include<stdlib.h> שאלה מספר 4 char *new_str(char *str1, char *str2) int str1len, str2len, str3len, times; char *str3 = NULL; str1len = strlen(str1); str2len = strlen(str2); printf("str1 \"%s\"\tlen=%2d\nstr2 \"%s\"\tlen=%2d\n",str1, str1len, str2, str2len); if (str1len < str2len) printf("str1 is the short one!!!\n"); times = (str2len - str1len + 1); str3len=str1len + (str2len - str1len + 1)*str1len; printf("new Str3 will have length of %d\n", ++str3len); עמוד 9

else str3 = (char *)malloc(str3len * sizeof(char*)); strcpy(str3, str1); while (times) strncat(str3, str2, 4); str2++; times--; printf("str2 is the short one!!!\n"); times = (str1len - str2len + 1); str3len = str2len + (str1len - str2len + 1)*str2len; printf("new Str3 will have length of %d\n", ++str3len); str3 = (char *)malloc(str3len * sizeof(char*)); strcpy(str3, str2); while (times) strncat(str3, str1, 4); str1++; times--; return str3; int main() char *str1 = "abcdefgh"; char *str2 = "good"; Option 2: char *str2 = "abcdefgh"; char *str1 = "good"; Option 3: char *str2 = "abcdefgh"; char *str1 = "goodvibe"; char *str3; str3=new_str(str1, str2); printf("new str3 is \"%s\"\n", str3); return 0; Output 1: Str1 "abcdefgh" length = 8 Str2 "good" length = 4 Str2 is the short one!!! New Str3 will have length of 25 עמוד 01

New str3 is "goodabcdbcdecdefdefgefgh" Output for Option 2 (str1 short then str2): Str1 "good" length = 4 Str2 "abcdefgh" length = 8 Str1 is the short one!!! New Str3 will have length of 25 New str3 is "goodabcdbcdecdefdefgefgh" Output for Option 2 (str1 length equal to str2): /*Str1 "goodvibe" length = 8 Str2 "abcdefgh" length = 8 Str2 is the short one!!! New Str3 will have length of 17 New str3 is "abcdefghgood*/ 1, 4, 6, 8, 9, 11, 14, 16, 18, 19, enter number : 24 Yes!!: 6 18 1, 4, 6, 8, 9, 11, 14, 16, 18, 19, enter number : 21 No!! שאלה מספר 5 א. התוכנית תדפיס את התוצאות הבאות עבור המשתנים: 1, 4, 6, 8, 9, 11, 14, 16, 18, 19, enter number : 17 Yes!!: 1 16 התוכנית מגדירה מערך ומאתחלת אותו ב- 01 מספרים. בנוסף מוגדרים מספר משתנים: שני זקיפים j-וi משתנה דגל flag ומשתנה מספר num המיועד עבור קלט מהמשתמש. התוכנית מדפיס את המערך המאותחל ואז קולטת מהמשתמש מספר שלם ובודקת האם יש במערך זוג מספרים שסכומם שווה לערכו של המספר שנקלט, ברגע שנמצא זוג כזה ערכו של הדגל הופך ל- 0 הלולאה מסתיימת והזוג מודפס יחד עם המילה,Yes!! אחרת מודפס.No!! ב. עמוד 00

שאלה מספר 6 א. התוכנית תדפיס את התוצאות הבאות: 7, 6, 5, 4, 3, הפונקציה הרקורסיבית sec_req() קולטת את המחרוזת של המספרים מהתוכנית הראשית. במידה והמחרוזת ריקה מסיימים את הקריאות הרקורסיביות. בקריאה לרקורסיה נבדק האם ערכו של תו במחרוזת +0 שווה לשכנו מימין. אם התשובה היא כן, הדגל f מקבל את הערך 0 ועוברים לתו הבא ובכך בודקים את הזוג הבא, במידה ולא הופכים את הדגל ל- 1 ושוב בודקים את הזוג הבא. בסיום נקבל את סדרת המספרים שבמחרוזת אשר עומדים בתנאי שיש תמיד אחד מימינם הגדול מהם ב- 0. 4 גדול מ- ב 3 5-0, גדול מ- 4 ב- 0, 6 גדול מ- 5 ב- 0, 7 גדול מ- 6 ב- 0. ל- 0 שבמערך אין שכן 8 וכנ"ל לגבי 9 שאין קטן ממנו ב- 0. ב. שאלה מספר 7 א. ב. התוכנית תדפיס את התוצאות הבאות: hello exam2018 smalllarge הפונקציה func() קולטת מחרוזת הנשלחת מהתוכנית הראשית לתוך מצביע מחרוזתי. מגדירה שני מצביעים *str1 ו- *str2 המיועדים לקליטת מחרוזות בהמשך וכן שלושה זקיפים,i.,j k לשני המצביעים המקומיים מבצעת הפונקציה הקצאת זיכרון בודד אחד מטיפוס תווי וסוגרת את שתי המחרוזות בתו '0\', כמו כן היא מאפסת את שני הזקיפים j ו- k. בהמשך הפונקציה עוברים על המחרוזת שנקלטה עד לסיומה ומבצעים בתוך לולאת המעבר שתי בדיקות: הראשונה בודקת האם התו הנבדק הוא אות גדולה או שווה ל- )97( a במידה וכן מבצעים את הבדיקה השנייה האם התו הנבדק מרחקו מהתו a לפי טבלת אסקי קטן או שווה ל- 38 שהוא המרחק בין )97( a ל- )088(. z משמעות בדיקה זו היא לוודא שהתו שייך לקבוצת האותיות הקטנות. במידה והתשובה היא אמת מגדילים את הזקיף j, מקצים זיכרון נוסף למחרוזת *str1 ומכניסים למחרוזת הראשונה *str1 את התו שנבדק כך שכל האותיות הקטנות בסיום המעבר על המחרוזת ימצאו במחרוזת הראשונה.*str1 אחרת, כלומר אם התו שנבדק ערכו קטן מהתו )97( a לפי טבלת אסקי שהמשמעות היא כי הוא אינו אות קטנה מגדילים את הזקיף k ומקצים זיכרון נוסף למחרוזת *str2 ומכניסים את התו למחרוזת השנייה *str2 כך שכל התווים במחרוזת שאינם אותיות קטנות כלומר אותיות גדולות, ספרות ורווחים יוכנסו למחרוזת.*str2 לאחר סיום המעבר על המחרוזת המקורית כל האותיות הקטנות ימצאו במחרוזת *str וכל שאר התווים ימצאו במחרוזת.*str2 כעת מבצעים שרשור של שתי המחרוזות הראשונה *str1 המכילה את האותיות הקטנות והשנייה *str2 לתוך המחרוזת.*str1 כעת משחררים את הקצאת הזיכרון של המצביע *str2 ומחזירים את כתובת המצביע str1 לתוכנית הראשית. עמוד 08

שאלה מספר 8 א. ב. ג. הפונקציה func() קבלת מספר הקסהדצימלי ומייצרת בתוכה תוך כדי שימוש בהזזות ספרה בינארית שהיא חלק מהמספר הבינארי בעל 2 ספרות המייצג את המספר ההקסהדצימלי שנשלח אליה. ע"י שימוש בלולאה התוכנית שולחת לפונקציה כל פעם מספר כאשר היא מקטינה אותו כל סיבוב וכך אם נדפיס את על ההחזרות של הפונקציה נקבל את המספר הבינארי המיצג את ההקסדצימלי שנשלח. להלן מספר דוגמאות: כאשר נשלח המספר 0x74 מתוך הלולאה נקבל בחזרה אחרי כל הסיבובים את כל הספרות המייצגות אותו בבסיס בינארי: 01110100 אם נתרגם מספר זה למספר דצימלי נקבל 111 שהוא ייצוג של 74 בהקסהדצימלי. כאשר נשלח המספר 0xdc מתוך הלולאה נקבל בחזרה אחרי כל הסיבובים את כל הספרות המייצגות אותו בבסיס בינארי: 00100011 אם נתרגם מספר זה למספר דצימלי נקבל 220 שהוא ייצוג של DC בהקסהדצימלי. כאשר נשלח המספר 0xfe מתוך הלולאה נקבל בחזרה אחרי כל הסיבובים את כל הספרות המייצגות אותו בבסיס בינארי: 00000001 אם נתרגם מספר זה למספר דצימלי נקבל 254 שהוא ייצוג של FE בהקסהדצימלי. כאשר נשלח המספר 0x8b מתוך הלולאה נקבל בחזרה אחרי כל הסיבובים את כל הספרות המייצגות אותו בבסיס בינארי: 01110100 אם נתרגם מספר זה למספר דצימלי נקבל 139 שהוא ייצוג של 8B בהקסהדצימלי. התוכנית מגדירה חמישה משתנים: הראשון num הוא תווי בו מתבצעת השמה של מספר הקסהדצימלי, האחרים הם משתנים שלמים:,i curr,,p err ומאפסת את p ואת.err כעת מתבצעת לולאה אשר מבצעת 2 סיבובים ובכל סיבוב היא שולחת את המספר ההקסהדצימלי לפונקציה לאחר הזזה של מקום אחד ימינה. בכל סיבוב של הלולאה הפונקציה מחזירה ספרה 1 או 0. הערך המוחזר מהפונקציה מסתכם לתוך המשתה p. לאחר סיום הלולאה בתוך המשתנה p יש את מספר ה- 0 המרכיבים את המספר הבינארי שהוא התרגום של המספר ההקסהדצימלי שנשלח לפונקציה כי שניתן לראות בדוגמאות שבסעיף א'. בהמשך נבדק האם המשתנה p הוא אי זוגי, כלומר מספר ה- 0 בו מתחלק ב- 8 עם שארית, במקרה כזה לתוך המשתנה err יוכנס הערך 0 כלומר יש שגיאה ומספר ה- 0 במספר הוא אי זוגי. לאחר מכן ייבדק האם המשתנה err מכיל 1, כלומר מספר ה- 0 במספר הוא זוגי במקרה כזה יודפס: number is OK ונרד שורה, במידה ומספר ה- 0 אינו זוגי יודפס: error ונרד שורה. התוכנית תדפיס את התשובות הבאות: number is OK error error number is OK עבור num = 0x74 יודפס : עבור num = 0xdc יודפס : עבור num = 0xfe יודפס : עבור num = 0x8b יודפס : עמוד 03